/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.beans;

import org.cip.esymons.general.util.ControladorAbstracto;
import cip.util.PaginacionFiltro;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import org.cip.esymons.tesoreria.bc.CuentaContableDelegate;
import org.cip.esymons.tesoreria.be.CuentaContable;
import org.cip.esymons.tesoreria.be.EnumEstadoCuentaContable;

/**
 *
 * @author Ingrid Capunay
 */
public class CuentaContableController extends ControladorAbstracto {

    private CuentaContableDelegate delegado;
    private MiPaginador paginador;
    private CuentaContable cuentaContable;
    private int controladorSolicitante;//sirve para saber de donde se le esta llamando (que controlador lo llama)
    private String nombrePresupuestoSeleccionado;

    public CuentaContableController() {
        delegado = new CuentaContableDelegate();
        paginador = new MiPaginador<CuentaContable>(null, 20);
        paginador.setFilter("");

    }

    /**
     * @return the cuentaContable
     */
    public CuentaContable getCuentaContable() {
        return cuentaContable;
    }

    /**
     * @param cuentaContable the cuentaContable to set
     */
    public void setCuentaContable(CuentaContable cuentaContable) {
        this.cuentaContable = cuentaContable;
    }

    /**
     * @return the controladorSolicitante
     */
    public int getControladorSolicitante() {
        return controladorSolicitante;
    }

    /**
     * @param controladorSolicitante the controladorSolicitante to set
     */
    public void setControladorSolicitante(int controladorSolicitante) {
        this.controladorSolicitante = controladorSolicitante;
    }

    /**
     * @return the nombrePresupuestoSeleccionado
     */
    public String getNombrePresupuestoSeleccionado() {
        return nombrePresupuestoSeleccionado;
    }

    /**
     * @param nombrePresupuestoSeleccionado the nombrePresupuestoSeleccionado to set
     */
    public void setNombrePresupuestoSeleccionado(String nombrePresupuestoSeleccionado) {
        this.nombrePresupuestoSeleccionado = nombrePresupuestoSeleccionado;
    }

    public final class MiPaginador<k> extends PaginacionFiltro {

        private String codigo;
        private String desc;

        public MiPaginador(String action, int cantidad) {
            super(action, cantidad);
        }

        @Override
        public int contar() throws Exception {
            try {
                return delegado.contarPaginadorCuentaContable(codigo, desc);
            } catch (Exception e) {
                return 0;
            }
        }

        @Override
        public List listar() throws Exception {
            try {
                return delegado.paginadorCuentaContable(getPaginador().getCantidadxPagina(), getPaginador().getPosicion(), codigo, desc);
            } catch (Exception e) {
                return new ArrayList();
            }
        }

        public String getCodigo() {
            return codigo;
        }

        public void setCodigo(String valor) {
            try {
                if (!valor.equals(codigo)) {
                    codigo = valor;
                    reset();
                }
            } catch (Exception ex) {
                codigo = null;
            }
        }

        public String getDesc() {
            return desc;
        }

        public void setDesc(String valor) {
            try {
                if (!valor.equals(desc)) {
                    desc = valor;
                    reset();
                }
            } catch (Exception ex) {
                desc = null;
            }
        }
    }

    /**
     * @return the paginador
     */
    public MiPaginador getPaginador() {
        return paginador;
    }

    /**
     * @param paginador the paginador to set
     */
    public void setPaginador(MiPaginador paginador) {
        this.paginador = paginador;
    }

    public String nuevo() {
        cuentaContable = new CuentaContable();
        cuentaContable.setCcoEstado(EnumEstadoCuentaContable.Activa);
        return "nuevo";
    }

    public String nuevoDesdeCI() {
        cuentaContable = new CuentaContable();
        cuentaContable.setCcoEstado(EnumEstadoCuentaContable.Activa);
        return null;
    }
    public String grabar() {
        if (!cuentaContable.getCcoCodigo().isEmpty()) {
            if (!cuentaContable.getCcoDesc().isEmpty()) {                
                delegado.create(cuentaContable);
                paginador.reset();
                ControladorAbstracto.info("La Cuenta Contable ha sido crada con exito.");
                return "buscar";
            } else {
                ControladorAbstracto.error("Ingrese una Descripción");
                return null;
            }
        } else {

            ControladorAbstracto.error("Ingrese un Código");
            return null;

        }

    }
    public String grabarDesdeCI() {
        if (!cuentaContable.getCcoCodigo().isEmpty()) {
            if (!cuentaContable.getCcoDesc().isEmpty()) {
                delegado.create(cuentaContable);
                ControladorAbstracto.info("La Cuenta Contable ha sido crada con exito.");
                return null;
            } else {
                ControladorAbstracto.error("Ingrese una Descripción");
                return null;
            }
        } else {
            ControladorAbstracto.error("Ingrese un Código");
            return null;
        }
    }

    public String cancelarDesdeCI() {
        return null;
    }

    public String anular() {
        cuentaContable.setCcoEstado(EnumEstadoCuentaContable.Anulada);
        delegado.edit(cuentaContable);
        return null;
    }

    public String cancelar() {
        return "cancelar";
    }

    public String buscar() {
        paginador.reset();
        return null;
    }

    public String actualizar() {
        delegado.edit(cuentaContable);
        paginador.reset();
        ControladorAbstracto.info("La Cuenta Contable ha sido actualizada con exito.");
        return "buscar";
    }

    public List<CuentaContable> autocompletarCuentasContables(Object event) {
        List<CuentaContable> lista = new ArrayList();
        String cond = event.toString().toUpperCase();
        try {
            lista = delegado.listadoCuentasContablesActivas(cond);
        } catch (Exception ex) {
            error(ex.toString());
        }
        return lista;
    }

    public SelectItem[] getEstadoCuentaContableItems() {
        try {
            SelectItem[] select = new SelectItem[EnumEstadoCuentaContable.values().length];
            int cont = 0;
            for (EnumEstadoCuentaContable e : EnumEstadoCuentaContable.values()) {
                select[cont] = new SelectItem(e, e.name());
                cont++;
            }
            return select;
        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            select[0] = new SelectItem(null, "No existen Estados");
            return select;
        }
    }
}
